package com.own.business.question.entity.open;

import com.own.business.question.entity.model.PracticeConfig;
import com.own.business.question.entity.vo.PracticeVo;
import com.own.business.question.entity.vo.QuestionVo;
import com.own.component.common.login.util.SessionUserUtil;
import com.own.component.common.model.ResultModel;

/**
 * BaseOpenPractice
 *
 * @author chenxueli
 * @date 2021-06-18 11:39:00
 */
public interface BaseOpenPractice {

    /**
     * 获取练习题目
     *
     * @param targetId 目标id
     * @param userId   获取题目的用户id
     * @param config   练习配置
     * @return 练习信息
     */
    ResultModel<PracticeVo> getPractice(Long targetId, Long userId, PracticeConfig config);

    /**
     * 获取练习题目
     *
     * @param targetId 目标id
     * @param config   练习配置
     * @return 练习信息
     */
    default ResultModel<PracticeVo> getSelfPractice(Long targetId, PracticeConfig config) {
        return getPractice(targetId, SessionUserUtil.getLoginUser().userId(), config);
    }

    /**
     * 确认提交练习
     *
     * @param practiceId 练习id
     * @return 练习信息
     */
    ResultModel<PracticeVo> checkPractice(Long practiceId);

    /**
     * 根据流水id获取题目信息
     *
     * @param historyId 流水id
     * @return 题目信息
     */
    ResultModel<QuestionVo> getQuestionByHistoryId(Long historyId);

    /**
     * 提交答案
     *
     * @param pk      流水id
     * @param answer  答案信息
     * @param useTime 用时
     * @return 是否提交成功
     */
    ResultModel<Boolean> submit(Long pk, String answer, Long useTime);

}
